cswork / libraryOpen practice workspace

Interview guides · Freeport-McMoRan

Freeport-McMoRan Software Engineer Interview Guide

Freeport-McMoRan Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

As a Software Engineer at Freeport-McMoRan, you play a direct role in powering one of the world's largest international mining companies through modern technology and digital transformation. Software engineering at Freeport-McMoRan is not limited to standard web application development; it encompasses building, modernizing, and optimizing systems that drive massive industrial operations. From automated haulage systems and sensor-driven equipment monitoring to enterprise data analytics and operational improvement platforms, your code directly influences site efficiency, environmental management, and worker safety across major operational hubs such as Phoenix, Morenci, and Bagdad. This position bridges the gap between digital innovation and heavy industry.

This guide is scoped to a Software Engineer candidate at Freeport-McMoRan.

Focus areas

  • Automated Pre-recorded Interview Responses
  • Safety Culture Awareness
  • Safety Meaning / Safety Communication

The Freeport-McMoRan interview process

Freeport-McMoRan candidates report 5 rounds over 4-6 weeks. The stages below are what candidates describe, not a published process.

Digital Video Screening

Initial stage using a digital platform where candidates respond to pre-recorded behavioral and situational questions.

What to demonstrate

  • Initial stage using a digital platform where candidates respond to pre-recorded behavioral and situational questions
  • Depth in Automated Pre-recorded Interview Responses

How to prepare

  • Answer aloud and timed: Why do you want to work for Freeport-McMoRan, and what do you know about our company?
  • Answer aloud and timed: Describe a situation where you had to work in a group to solve a challenging problem.

Recruiter Contact

Candidates who pass the digital screening are contacted by an internal recruiter or HR to schedule a secondary interview.

What to demonstrate

  • Candidates who pass the digital screening are contacted by an internal recruiter or HR to schedule a secondary interview
  • Depth in Automated Pre-recorded Interview Responses

How to prepare

  • Be able to walk your CV end to end in two minutes, and say why this company specifically.
  • Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.

Panel Interview

A Microsoft Teams or phone interview with a panel including the hiring manager and senior engineers, focusing on resume experience and technical background.

What to demonstrate

  • A Microsoft Teams or phone interview with a panel including the hiring manager and senior engineers
  • Focusing on resume experience and technical background

How to prepare

  • Answer aloud and timed: What is your favorite class or technical project, and why did you choose your major?
  • Answer aloud and timed: What does safety mean to you, both in an office and on an operational field site?

On-site Visit

Qualified candidates may be invited for a final on-site visit, which includes a formal interview session and a tour of the site.

What to demonstrate

  • Qualified candidates may be invited for a final on-site visit, which includes a formal interview session and a tour of the site
  • Depth in Automated Pre-recorded Interview Responses

How to prepare

  • Answer aloud and timed: Can you give an example of a safety situation where you observed a risk and took immediate action?
  • Answer aloud and timed: Describe a time when you were faced with an ethical dilemma in a project or workplace and how you responded.

Background Checks

Final step includes formal pre-employment background checks and health/drug screenings prior to onboarding.

What to demonstrate

  • Final step includes formal pre-employment background checks and health/drug screenings prior to onboarding
  • Depth in Automated Pre-recorded Interview Responses

How to prepare

  • Answer aloud and timed: How do you balance meeting tight software project deadlines with maintaining safety and quality standards?
  • Answer aloud and timed: Tell us about a time where you had to solve a complex technical problem with a project team.

Where candidates lose points

Master the STAR Method

Frame every behavioral answer by setting the Situation, defining your specific Task, detailing the precise Action you executed, and highlighting the quantitative or qualitative Result.

Articulate Safety Focus

Proactively integrate safety awareness into your answers. Show that you recognize how reliable software directly supports field safety and operational continuity.

Research Copper Operations

Gain a basic understanding of Freeport-McMoRan operations, such as open-pit copper mining, leaching, and refining. Demonstrating domain awareness sets you apart from candidates with purely generic software backgrounds.

Avoid over-exaggerating your past project involvement

Panel interviewers frequently ask targeted follow-up questions to verify your exact individual technical contributions.

Questions & practice

Find overlapping job attempts and peak concurrency from lease records

Medium · sweep line · intervals · leases

A day of job_run history yields about 50,000,000 attempt records: (job_run_id, job_type, attempt, started_at, finished_at which is NULL when the worker died, lease_expires_at). Leases expire on a clock, so a job that outran its lease ran twice. Produce (a) every job_run_id whose attempts overlapped in wall-clock time and (b) the peak number of simultaneously running attempts per job_type with the minute it occurred. Target O(n log n). State how you treat a NULL finished_at and what clock skew does to your answer.

Approach

  1. Define the interval before sorting anything: an attempt occupies [started_at, COALESCE(finished_at, lease_expires_at)). finished_at is observed and lease_expires_at is only a promise, so every attempt without a finish contributes an estimate and the whole result is a lower bound on overlap rather than an exact count.
  2. For peak concurrency, sweep: emit 2n endpoints, sort by (timestamp, kind) with ends ordered before starts at equal timestamps, then walk the sequence maintaining a counter per job_type and record each type's maximum with its timestamp. O(n log n) dominated by the sort, O(n) space, or O(1) extra if the sort is external and the walk streams.
  3. For overlap detection, do not compare attempts pairwise. A single global sort by (job_run_id, started_at) gives both the grouping and the order; within a group, keep the maximum end seen so far and report an overlap exactly when the next start is less than that running maximum, which is one linear pass after the sort.
  4. Half-open intervals matter and are easy to get wrong: with closed intervals an attempt ending at the same millisecond another begins reads as concurrency two, and across 50,000,000 records that artefact swamps the real signal.

Follow-up

  • A handler is not idempotent and you have found 400 overlapping jobs. Which of them actually caused damage, and what would you query to find out?
  • Peak concurrency for one job_type is 4 against a configured cap of 4. Is the cap working, or is the data hiding attempts that never started?

Collapse a redelivered event batch into per-aggregate high-water marks

Easy · hashing · at-least-once · aggregation

You drain a batch of up to 5,000,000 events, each (aggregate_id BIGINT, aggregate_version INT, event_type, payload). The log guarantees order within one aggregate only; the batch merges 64 partitions, and a relay failover has redelivered a range, so an older version for an aggregate can appear after a newer one. Given a map of last_applied_version per aggregate, produce the events worth applying, at most one per (aggregate_id, version), plus the count discarded. Target O(n) time. State the memory for 2,000,000 distinct aggregates and what you do when it does not fit.

Approach

  1. One pass, one hash map from aggregate_id to the highest version kept, and a discard counter. An event whose version is at or below last_applied_version for its aggregate is dropped without further work, which is the whole reason the event carries its version rather than a delta. O(n) expected time, O(d) space in distinct aggregates.
  2. Keep the maximum, never the last occurrence. The redelivered range means the final appearance of an aggregate in the batch can be an older version than one seen earlier in the same batch, so last-wins applies stale state over newer state and the projection regresses with no error anywhere.
  3. Cost the memory instead of calling it large: an 8-byte key plus a 4-byte version is 12 bytes of payload, and an open-addressed table held at a 0.7 load factor costs roughly 17 bytes per entry before per-slot metadata, so 2,000,000 aggregates is tens of megabytes in a native layout and several times that in a runtime that boxes both key and value.
  4. If the distinct set exceeds memory, partition on hash(aggregate_id) mod P and reduce each partition independently. Every event for one aggregate hashes to the same partition, so the per-partition result is exact and the merge is concatenation rather than a second reduction.

Follow-up

  • The payload is a patch rather than a snapshot, so applying only the highest version loses the intermediate changes. What changes in your reduction?
  • How do you detect that version 7 arrived while version 6 was never delivered, and what should the consumer do about the gap?

Canonicalise a request body into a stable idempotency fingerprint

Medium · parsing · canonicalisation · hashing

idempotency_key.request_fingerprint is a SHA-256 over the method, path and canonicalised body, and a retry whose fingerprint differs must be rejected with 422 rather than served the stored response. Write the canonicaliser. Bodies are JSON up to 256 KB nested at most 32 levels; clients vary key order, whitespace and unicode escaping, and some send 64-bit ids as JSON numbers. Produce a deterministic byte string such that semantically identical bodies match and any semantic difference does not. State your complexity and name two normalisations you refuse to perform.

Approach

  1. Parse once into a tree, then re-serialise under fixed rules: object keys sorted, array order preserved, one escaping convention, no insignificant whitespace. Parsing is O(n) and sorting keys is O(k log k) per object, so O(n log n) overall with O(depth) stack, and the 32-level cap is enforced during parsing because hostile nesting is how a canonicaliser becomes a stack overflow.
  2. Sort keys by their UTF-8 bytes and say why the obvious implementation is wrong in some runtimes: a default string comparison that orders by UTF-16 code units places surrogate pairs, meaning code points from U+10000 up, below U+E000 to U+FFFF, which is not UTF-8 byte order, so two services written in different languages disagree on the same document.
  3. Do not re-encode numbers through a double. IEEE-754 binary64 represents integers exactly only up to 2^53, so normalising a 19-digit id through a float changes it, and 1 against 1.0 cannot be reconciled without deciding whether they are the same value. Preserve the literal token, and require ids as strings at the API boundary if you want them comparable.
  4. Reject duplicate keys rather than picking one. JSON permits them and parsers disagree, most keeping the last, so any choice you make ties the fingerprint to a parser detail that the code handling the request does not necessarily share.

Follow-up

  • A client sends the same logical request with an extra field your API ignores. Same key, different fingerprint, so you return 422. Is that the right answer?
  • Where does the fingerprint get computed relative to request decompression and the body-size limit?

Keep soft-deleted accounts from blocking re-registration

Easy · soft delete · unique constraints · engine differences

app_user holds user_id, tenant_id, email CITEXT, password_hash (NULL for SSO principals), email_verified_at, auth_version, status ('invited','active','suspended','deactivated'), created_at, updated_at, deleted_at. Two live accounts for one address inside a tenant must be impossible, but an address freed by a soft delete must be reusable, and the same tenant may delete and re-register it repeatedly. Write the uniqueness DDL for PostgreSQL 16, then the equivalent for MySQL 8 where partial indexes do not exist, and say what each permits once three deleted rows already hold that address.

Approach

  1. Start from what is actually unique: not (tenant_id, email), but (tenant_id, email) among live rows. PostgreSQL says that directly — CREATE UNIQUE INDEX app_user_live_email ON app_user (tenant_id, email) WHERE deleted_at IS NULL. A full constraint over the same two columns burns the address permanently the first time someone deletes an account.
  2. Keep case-insensitivity in the type or the index, never in the application: CITEXT as given, or UNIQUE (tenant_id, lower(email)) as an expression index where the extension is unavailable. A case-sensitive unique column is exactly how two accounts for one human appear.
  3. For MySQL 8 the predicate has to move inside the key: add a discriminator column that is a constant 0 while the row is live and is set to user_id on delete, with UNIQUE (tenant_id, email, deleted_marker). Live rows share the constant and still collide; deleted rows differ from each other and stop colliding.
  4. State the NULL variant and its dependency: leaving the marker NULL for deleted rows also works, because a unique index treats NULLs as distinct — true in MySQL, and true in PostgreSQL only under the default NULLS DISTINCT, which PostgreSQL 15 lets you reverse. Check the polarity against the three existing deleted rows: constant-on-live is what preserves the collision you want, and reversing it silently admits duplicate live accounts.

Follow-up

  • A deleted account re-registers with the same address the next day. Do the old resource rows follow the new user_id, and how does the API keep the two principals apart?
  • How do you honour an erasure request while resource_revision.actor_user_id still references this table?

Stop tag and share joins from fanning out a page

Medium · join fan-out · semi-joins · many-to-many

resource_tag is (resource_id, tag_id) with PK (resource_id, tag_id); resource_share is (resource_id, shared_with_user_id, permission). The tagged-and-shared listing inner-joins resource to both, filters tenant_id, tag_id = ANY($2) and shared_with_user_id = $3, orders by updated_at DESC and takes 50. Pages come back with fewer than 50 distinct resources and the total in the header is far too high. Explain the row multiplication, rewrite both the page query and the count query so each is correct, and name the index each one needs. PostgreSQL 16.

Approach

  1. Do the arithmetic against the predicates that are actually there. An inner join emits one row per matching child row, and both joins are filtered: tag_id = ANY($2) admits only the requested tags, shared_with_user_id = $3 admits one user's share rows. So a resource holding three of the requested tags and shared with $3 once yields three rows, not one — the multiplier is its count of matching tags times its share rows for that single user, and that second factor is 1 unless the table admits duplicate (resource_id, shared_with_user_id) pairs. LIMIT 50 then limits rows rather than resources, and COUNT(*) counts pairs — the header is the product, not the population.
  2. Reject DISTINCT as the fix. It deduplicates after the product has been built, so the planner must materialise and sort the fanned-out set before the LIMIT can apply, and it leaves any SUM or AVG in the same select list wrong.
  3. Rewrite both filters as semi-joins, keeping resource as the only row source: AND EXISTS (SELECT 1 FROM resource_tag rt WHERE rt.resource_id = r.resource_id AND rt.tag_id = ANY($2)) and the same shape against resource_share. A semi-join stops at the first match per resource and preserves the driving index order, so ORDER BY updated_at DESC, resource_id DESC LIMIT 50 still stops after 50 rows.
  4. Count with the same predicates and no join at all: SELECT count(*) FROM resource r WHERE r.tenant_id = $1 AND r.status = 'active' AND EXISTS (...) AND EXISTS (...). Nothing multiplies a resource, so the number is the population.

Follow-up

  • The filter changes from 'any of these tags' to 'all of these tags'. Rewrite it and state what it costs relative to the ANY form.
  • A resource can be shared with the same user twice under different permissions. Does your count change, and should it?

Tell us about a time where you had to solve a complex technical problem with a project team.

Medium · Technical & Domain Knowledge

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

What experience do you have working with database systems, data management tools, or scripting languages?

Medium · Technical & Domain Knowledge

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

What do you know about copper extraction processes or the operational limitations of porphyry deposits?

Medium · Technical & Domain Knowledge

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

Describe how you have used programming or automation tools to improve an existing process in your past roles o

Medium · Technical & Domain Knowledge

Describe how you have used programming or automation tools to improve an existing process in your past roles or coursework.

Approach

  1. Clarify what is being asked and what a complete answer contains.
  2. State your assumptions explicitly before working the problem.
  3. Say what you would check first and why it is the highest-information step.
  4. Work from the requirement backwards to the design.

Follow-up

  • What assumption would you test first?
  • How would you know your answer was wrong?

How do you approach debugging or troubleshooting a system when you do not have complete documentation?

Medium · Technical & Domain Knowledge

Approach

  1. Establish what changed and when, before forming any theory.
  2. Pick a bisection that eliminates candidates whichever way it turns out.
  3. Check the instrumentation before believing the symptom.
  4. Separate the trigger from the cause; the deploy is rarely the bug.

Follow-up

  • What would you look at first, and what would it rule out?
  • How would you tell a cause from a coincidence here?

Suggested practice checklist

Built from the rounds and topics Freeport-McMoRan candidates report.

Day 1 — Map the Freeport-McMoRan loop

  • Write out the reported sequence: Digital Video Screening, Recruiter Contact, Panel Interview, On-site Visit, Background Checks.
  • For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.

Deliverable: A one-page map of the 5 reported rounds, with the weakest marked.

Day 2 — Work Automated Pre-recorded Interview Responses

  • Spend the session on Automated Pre-recorded Interview Responses, which Freeport-McMoRan candidates report being tested on.
  • Write one worked example in Automated Pre-recorded Interview Responses and time yourself on it.

Deliverable: One timed worked example in Automated Pre-recorded Interview Responses.

Day 3 — Work Safety Culture Awareness

  • Spend the session on Safety Culture Awareness, which Freeport-McMoRan candidates report being tested on.
  • Write one worked example in Safety Culture Awareness and time yourself on it.

Deliverable: One timed worked example in Safety Culture Awareness.

Day 4 — Work Safety Meaning / Safety Communication

  • Spend the session on Safety Meaning / Safety Communication, which Freeport-McMoRan candidates report being tested on.
  • Write one worked example in Safety Meaning / Safety Communication and time yourself on it.

Deliverable: One timed worked example in Safety Meaning / Safety Communication.

Day 5 — Answer out loud: Behavioral & Core Values

  • Answer aloud, timed: Why do you want to work for Freeport-McMoRan, and what do you know about our company?
  • Answer aloud, timed: Describe a situation where you had to work in a group to solve a challenging problem.

Deliverable: Spoken answers to 2 reported Behavioral & Core Values question(s), under time.

Day 6 — Answer out loud: Safety Culture & Workplace Ethics

  • Answer aloud, timed: What does safety mean to you, both in an office and on an operational field site?
  • Answer aloud, timed: Can you give an example of a safety situation where you observed a risk and took immediate action?

Deliverable: Spoken answers to 2 reported Safety Culture & Workplace Ethics question(s), under time.

Day 7 — Answer out loud: Technical & Domain Knowledge

  • Answer aloud, timed: Tell us about a time where you had to solve a complex technical problem with a project team.
  • Answer aloud, timed: How do you approach debugging or troubleshooting a system when you do not have complete documentation?

Deliverable: Spoken answers to 2 reported Technical & Domain Knowledge question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

Why do you want to work for Freeport-McMoRan, and what do you know about our company?

Medium · Behavioral & Core Values

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe a situation where you had to work in a group to solve a challenging problem.

Medium · Behavioral & Core Values

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Tell me about a time when you aimed high or set an ambitious goal for a project and how you achieved it.

Medium · Behavioral & Core Values

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe a time when you faced a difficult situation at work or school and how you handled it.

Medium · Behavioral & Core Values

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

What is your favorite class or technical project, and why did you choose your major?

Medium · Behavioral & Core Values

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

What does safety mean to you, both in an office and on an operational field site?

Medium · Safety Culture & Workplace Ethics

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Can you give an example of a safety situation where you observed a risk and took immediate action?

Medium · Safety Culture & Workplace Ethics

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe a time when you were faced with an ethical dilemma in a project or workplace and how you responded.

Medium · Safety Culture & Workplace Ethics

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

How do you balance meeting tight software project deadlines with maintaining safety and quality standards?

Medium · Safety Culture & Workplace Ethics

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?